package com.lgj.tlias.interceptor;

import com.alibaba.fastjson.JSONObject;
import com.lgj.tlias.domain.pojo.Result;
import com.lgj.tlias.utils.JwtUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Slf4j
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
    //目标资源方法执行前执行。 返回true：放行    返回false：不放行
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
        //1.获取令牌(令牌会跟随在请求头里名字为token)
        String token = req.getHeader("token");
        //1.1 token 不存在
        if (!StringUtils.hasLength(token)) {
            log.info("token不存在");
            //把Result转换为json字符串返回（使用阿里巴巴的fastjson）
            Result responseResult = Result.error(0, "NOT_LOGIN");
            String json = JSONObject.toJSONString(responseResult);
            //设置响应格式（防止乱码）
            resp.setContentType("application/json;charset=utf-8");
            //响应
            resp.getWriter().write(json);
            return false;
        }
        //1.2 token 无效
        try {
            JwtUtils.parseJWT(token);
        } catch (Exception e) {
            log.info("令牌解析失败！");
            //把Result转换为json字符串返回（使用阿里巴巴的fastjson）
            Result responseResult = Result.error(0, "NOT_LOGIN");
            String json = JSONObject.toJSONString(responseResult);
            //设置响应格式（防止乱码）
            resp.setContentType("application/json;charset=utf-8");
            //响应
            resp.getWriter().write(json);
            return false;
        }
        //2 放行
        return true;
    }
//    //目标资源方法执行前后。
//    @Override
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
//    }
//    //视图渲染完毕后执行，最后执行
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
//    }
}
